package com.itheima.service.cargo.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.dao.cargo.ContractDao;
import com.itheima.dao.cargo.ExtCproductDao;
import com.itheima.domain.cargo.Contract;
import com.itheima.domain.cargo.ContractProduct;
import com.itheima.domain.cargo.ExtCproduct;
import com.itheima.domain.cargo.ExtCproductExample;
import com.itheima.service.cargo.ExtCproductService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@Service
public class ExtCproductServiceImpl implements ExtCproductService {

    @Autowired
    private ExtCproductDao extCproductDao;

    @Autowired
    private ContractDao contractDao;

    @Override
    public void save(ExtCproduct extCproduct) {
        //查询当前附件对应的合同
        Contract contract = contractDao.selectByPrimaryKey(extCproduct.getContractId());

        //==============================================附件新增======================================//
        //1 计算出附件的小计金额
        Double amount = extCproduct.getCnumber() * extCproduct.getPrice();
        extCproduct.setAmount(amount);

        //2 执行新增操作
        extCproductDao.insertSelective(extCproduct);

        //==============================================合同修改======================================//
        //1 修改合同中的附件种数
        contract.setExtNum(contract.getExtNum() + 1);

        //2 修改合同的总金额
        contract.setTotalAmount(contract.getTotalAmount() + amount);

        //3 执行修改
        contractDao.updateByPrimaryKeySelective(contract);

        //==============================================货物无无影响===================================//
    }

    @Override
    public void update(ExtCproduct extCproduct) {
        //查询当前附件对应的合同
        Contract contract = contractDao.selectByPrimaryKey(extCproduct.getContractId());

        //查询当前附件在数据库中的原有信息
        ExtCproduct extCproductOld = extCproductDao.selectByPrimaryKey(extCproduct.getId());
        Double amountOld = extCproductOld.getAmount();


        //==============================================附件修改======================================//
        //1 计算出附件的小计金额
        Double amount = extCproduct.getCnumber() * extCproduct.getPrice();
        extCproduct.setAmount(amount);

        //2 执行修改
        extCproductDao.updateByPrimaryKeySelective(extCproduct);
        //==============================================合同修改======================================//

        //1 修改总金额
        contract.setTotalAmount(contract.getTotalAmount() - amountOld + amount);

        //2 执行修改
        contractDao.updateByPrimaryKeySelective(contract);
        //==============================================货物无无影响===================================//
    }

    @Override
    public void delete(String id) {
        //查询当前附件的信息
        ExtCproduct extCproduct = extCproductDao.selectByPrimaryKey(id);

        //查询当前附件对应的合同
        Contract contract = contractDao.selectByPrimaryKey(extCproduct.getContractId());


        //==============================================附件删除======================================//
        extCproductDao.deleteByPrimaryKey(id);

        //==============================================合同修改======================================//
        //1 修改合同中的附件种数
        contract.setExtNum(contract.getExtNum() - 1);

        //2 修改合同中的总金额
        contract.setTotalAmount(contract.getTotalAmount() - extCproduct.getAmount());

        //3 执行修改
        contractDao.updateByPrimaryKeySelective(contract);

        //==============================================货物无无影响===================================//
    }

    @Override
    public ExtCproduct findById(String id) {
        return extCproductDao.selectByPrimaryKey(id);
    }

    @Override
    public List<ExtCproduct> findAll(ExtCproductExample example) {
        return extCproductDao.selectByExample(example);
    }

    @Override
    public PageInfo findByPage(int pageNum, int pageSize, ExtCproductExample example) {
        PageHelper.startPage(pageNum, pageSize);
        List<ExtCproduct> list = extCproductDao.selectByExample(example);
        return new PageInfo(list, 10);
    }
}
